个人网站搭建过程

网站架构

wordpress是一个用于快速搭建博客平台的php软件,运行在apache下

wekan是一个开源看板,类似trello,可用于项目管理和计划安排

搭建步骤

环境准备

1. 安装docker

2. 拉取wordpress、mysql、wekan、mongo的docker镜像

docker pull wordpress
docker pull mysql
docker pull mongo:4.4-rc-focal
docker pull wekanteam/wekan:v5.35
# 作者反馈最新版的镜像有bug,不建议拉取最新的。不过我看他说目前已经修复了。

docker创建网络用于容器间通信

docker network create huntzou_website

启动容器

1. 启动mysql

docker run --name db-mysql --restart=always -v /etc/localtime:/etc/localtime -e MYSQL_ROOT_PASSWORD=<your pwd> -d --network huntzou_website f2ad9

2. 进入到mysql容器中创建数据库

docker exec -it <containerID> bash
mysql -u<your db user> -p
CREATE DATABASE <your db name> DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

3. 启动wordpress

docker run --name wp-web --restart=always -v /etc/localtime:/etc/localtime --network huntzou_website -d -e WORDPRESS_DB_HOST=db-mysql -e WORDPRESS_DB_USER=<your db user> -e WORDPRESS_DB_PASSWORD=<your db pwd> -e WORDPRESS_DB_NAME=<your db name> -e WORDPRESS_TABLE_PREFIX=wp b44d

4. 启动mongodb

docker run -d --restart=always --name db-mongo -v /etc/localtime:/etc/localtime --network huntzou_website 5cea

5. 启动wekan

docker run -d --restart=always --name wekan-web -v /etc/localtime:/etc/localtime -e MONGO_URL="mongodb://db-mongo/wekan" -e ROOT_URL="http://wekan-web:8080" --network huntzou_website 0498

6. 启动nginx

docker run -d --restart=always --name nginx -v /etc/localtime:/etc/localtime --network huntzou_website -p 80:80 -p 8001:8001 -p 8002:8002 8325

其中 -v /etc/localtime:/etc/localtime 是将本机时区挂载到容器中,因为有些容器并不一定和你的服务器时间一样。

或者在容器构建之后使用命令 docker cp /usr/share/zoneinfo/Asia/Shanghai 容器ID:/etc/localtime

修改nginx配置

创建nginx配置文件 my_server_block.conf

server {
    listen 0.0.0.0:80;
    listen 0.0.0.0:8001;
    server_name <your ip or domain>;
    access_log /opt/bitnami/nginx/logs/huntzou_website.log;
    error_log /opt/bitnami/nginx/logs/huntzou_website_error.log;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header HOST $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://wp-web:80/;
        proxy_redirect off;
    }
}
server {
    listen 0.0.0.0:8002;
    server_name <your ip or domain>;
    access_log /opt/bitnami/nginx/logs/huntzou_website.log;
    error_log /opt/bitnami/nginx/logs/huntzou_website_error.log;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header HOST $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://wekan-web:8080/;
        proxy_redirect off;
    }
}

将配置文件上传至nginx容器中

docker cp my_server_block.conf 4a8f:/opt/bitnami/nginx/conf/server_blocks/

重启nginx容器

docker restart 4a8f

添加域名解析

上述步骤均在只使用ip的情况下完成,配置完成后也只能使用ip进行访问。我现在拥有了一个已经备案的域名,并希望该网站都能通过域名来访问

注:WordPress4.90+版本后域名更换排常简单。在后台菜单“设置-常规”,把“WordPress地址(URL)和站点地址(URL)”更换成新域名地址就可以了。文章图片和特色图片都会自动更换成新域名链接。

可以在管理页面左边栏中的 “Tools-Site Health” 中看到wordpress版本

首先进入wordpress后台修改两个地址

修改完成后使用IP就不能登录后台了,原因见另一篇文章:关于wordpress中WordPress Address和Site Address的理解

修改nginx配置并重启nginx:

# 访问一级域名默认跳转到wordpress页面
server {
    listen 80;
    server_name woyou.cool;
    rewrite ^/(.*) https://blog.woyou.cool/$1 permanent;
}
server {
    listen 80;
    server_name kanban.woyou.cool;
    access_log /opt/bitnami/nginx/logs/huntzou_website.log;
    error_log /opt/bitnami/nginx/logs/huntzou_website_error.log;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header HOST $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://wekan-web:8080/;
        proxy_redirect off;
    }
}
server {
    listen 80;
    server_name blog.woyou.cool;
    access_log /opt/bitnami/nginx/logs/huntzou_website.log;
    error_log /opt/bitnami/nginx/logs/huntzou_website_error.log;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header HOST $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://wp-web:80;
        proxy_redirect off;
    }
}

添加SSL证书

详见另一篇文章:Nginx反向代理wordpress开启HTTPS

其他

搭建私有音乐流媒体服务

Navidrome 是一个开源私有音乐流媒体软件,可以使用docker搭建

该播放器不支持页面上传音乐,故需要手动将音乐文件放在指定文件夹下

官网:https://www.navidrome.org/

docker镜像:https://hub.docker.com/r/deluan/navidrome

运行镜像:

docker run --restart=always --name navidrome -d --network huntzou_website -e ND_SCANSCHEDULE=1h -e ND_LOGLEVEL=error -e ND_UIWELCOMEMESSAGE="Welcome to HuntZou's private music lab" -e ND_SEARCHFULLSTRING=true -e ReverseProxyUserHeader=HTTP_X_REAL_IP d4a813d502ce

关于上述中环境变量配置说明见:https://www.navidrome.org/docs/usage/configuration-options/

由于我没有在容器中挂载宿主机磁盘,故若需要上传音乐则需要两步(也可以选择在运行时使用 -v music_folder:/music 进行挂载,则可以省略第2步)

  1. 先将歌曲传输到宿主机服务器上
  2. 再将宿主机上的歌曲复制到docker容器中
    docker ps my_music.mp3 navidrome:/music

其他关于环境的配置同其他服务,在nginx中暴露出一个 music.woyou.cool 域名指向 navidrome:4533 即可通过域名访问

Leave a Comment