跳到主要内容

Docker部署nginx及服务

· 阅读需 2 分钟
Lichlaughing

安装 Docker

按照官方文档安装:https://docs.docker.com/engine/install/

其中 docker compose 是以插件的方式安装的,插件 compose 版本:

[root@VM-24-16-centos nginx]# docker compose version
Docker Compose version v2.25.0

安装 nginx

使用 Docker 运行 Nginx,注意这里需要指定网络,然后通过服务名去调用其他容器的服务。

version: '3'
services:
nginx:
image: nginx:1.21.5
restart: always
container_name: nginx
environment:
- TZ=Asia/Shanghai
ports:
- 80:80
- 443:443
volumes:
- ./html:/usr/share/nginx/html/
- ./conf:/etc/nginx
- ./ssl:/usr/share/nginx/ssl #证书文件地址
- ./logs:/var/log/nginx
networks:
my_network:
networks:
my_network:

其他容器需要指定网络为:nginx_my_network

如果文件没有映射成功,那么可以随便启动一个 nginx 容器,然后利用拷贝命令将容器中的文件拷贝到宿主机上。

-- 例如:
docker cp nginx2:/etc/nginx/conf.d/default.conf ./conf/conf.d

[!help] 启动服务有个提示,但是不影响使用。 WARN[0000] /opt/myapp/nginx/docker-compose.yaml: version is obsolete 社区有个 issues [BUG] 'version' is obsolete #11628

配置服务及 SSL

添加服务 memos 官网:https://www.usememos.com/ 开源地址:https://github.com/usememos/memos Docker 运行命令:

docker run -d --name memos --network nginx_my_network  -p 5230:5230 -v ./data:/var/opt/memos --restart=always  neosmemo/memos:stable

到域名服务器商,将域名解析到服务器上。申请 SSL 证书。(腾讯云上可以申请免费一年的 SSL) 增加 nginx 配置文件 memos.conf 如下:

server {
listen 443 ssl;
server_name moment.lichenghao.cn;
# 证书位置
ssl_certificate /usr/share/nginx/ssl/moment.lichenghao.cn_bundle.crt;
ssl_certificate_key /usr/share/nginx/ssl/moment.lichenghao.cn.key;
# SSL配置
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
# 代理服务
location / {
proxy_pass http://memos:5230;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
access_log /var/log/nginx/moment.access.log;
error_log /var/log/nginx/moment.error.log;
}
server {
listen 80;
server_name moment.lichenghao.cn;
#将请求转成https
rewrite ^(.*)$ https://$host$1 permanent;
}

将配置文件放到 nginx 映射目录 conf/conf.d 下,并重启容器即可。

常见问题

报错413

Nginx 413错误表示请求实体太大(Request Entity Too Large)。这通常发生在客户端尝试上传一个超过服务器愿意或能够处理的大小限制的文件时。 修改配置文件 nginx.conf 增加如下:

http {
...
client_max_body_size 10M;
...
}