环境
- centos-docker
- 之前服务器win10 IIS部署,现在切成linux版
centos
登录服务器
ssh root@111.231.33.102
10.0.16.17 // 内网ip
mkdir home
cd /home // 工作目录
mkdir mysql
mkdir nginx
mkdir node
mkdir py
Mysql
# 使用官方MySQL镜像作为基础镜像
FROM mysql:5.7
# 设置MySQL root用户的密码
ENV MYSQL_ROOT_PASSWORD=YourPassword
# 暴露MySQL默认的端口3306
EXPOSE 3306
# 启动MySQL服务
CMD ["mysqld"]
cd mysql
docker build -t mysql:5.7 .
docker run -d --name mysql-3306 -v /root/home/mysql:/var/lib/mysql -p 3306:3306 mysql-5.7
docker exec -it mysql-3306 /bin/sh
mysql -u root -p
show databases
SELECT User, Host FROM mysql.user;
# 设置允许的ip
RENAME USER 'user'@'10.0.16.17' TO 'user'@'%';
# 重启
FLUSH PRIVILEGES;
Nginx
# 使用官方Nginx镜像的1.24版本
FROM nginx:1.24
# 设置工作目录
WORKDIR /usr/share/nginx
# 暴露80端口
EXPOSE 80
# 启动Nginx
CMD ["nginx", "-g", "daemon off;"]
// 构建
docker build -t nginx:1.24 .
// 运行并映射(目录要加/)
docker run -d --name nginx-80 \
-v /root/home/nginx/nginx/html/:/etc/nginx/html/ \
-v /root/home/nginx/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /root/home/nginx/nginx/logs/:/var/log/nginx/ \
-p 80:80 \
nginx:1.24
后端Node和PM2
# 使用 Node.js 18 版本的官方镜像作为基础镜像
FROM node:18-alpine
# 设置工作目录为 /app
WORKDIR /app
# 修改npm安装源
RUN npm config set registry https://registry.npmmirror.com
# 安装pm2
RUN npm install pm2 -g
# 暴露容器端口
EXPOSE 8001
EXPOSE 8002
EXPOSE 8003
EXPOSE 8004
EXPOSE 8005
EXPOSE 8006
EXPOSE 8007
EXPOSE 8008
EXPOSE 8009
EXPOSE 8010
# 使用 PM2 运行 Nuxt 应用程序
CMD ["pm2-runtime", "start", "ecosystem.config.js"]
// 构建
docker build -t node:18 .
// 运行并映射(目录要加/)
docker run -d --name node \
-v /root/home/node/app/:/app/ \
-p 8001:8001 \
-p 8002:8002 \
-p 8003:8003 \
-p 8004:8004 \
-p 8005:8005 \
-p 8006:8006 \
-p 8007:8007 \
-p 8008:8008 \
-p 8009:8009 \
-p 8010:8010 \
node:18
Python
FROM python:3.8
WORKDIR /app
COPY ./app/requirements.txt .
RUN pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
CMD ["python", "./pushdeer/main.py"]
操作
// 构建
docker build -t python:3.8 .
// 运行并映射
docker run -d --name python \
-v /root/home/python/app/:/app/ \
python:3.8
定时执行脚本
crontab -e // 命令打开cron表
12 05 * * * docker restart python // 每天的05:12重启动下docker容器
crontab -l // 命令查看cron任务列表
设置docker时区(和宿主一致)
临时设置
# 1. 进入运行中的容器(--user root 确保权限)
docker exec -it --user root 容器名 /bin/bash
# 2. 安装tzdata并设置时区(Ubuntu/Debian)
apt update && apt install -y tzdata
# 执行后会弹出交互界面,按提示选择「Asia」→「Shanghai」
# 如果没弹出
# 2.1 设成交互模式(临时)
unset DEBIAN_FRONTEND
# 2.2 重新触发配置向导
dpkg-reconfigure tzdata
# 2.3 按提示选择「Asia」→「Shanghai」
# 3. 验证时间(容器时间应与宿主机一致)
date
挂载宿主
docker run -d \
-v /etc/timezone:/etc/timezone:ro \ # 挂载时区标识文件(只读)
-v /etc/localtime:/etc/localtime:ro \ # 挂载时区软链接(只读)
--name 容器名 镜像名
Redis
# 使用最新版本的Redis官方镜像
FROM redis
# 暴露Redis端口
EXPOSE 6379
# 执行Redis服务
CMD ["redis-server"]
// 构建
docker build -t redis:7.0 .
// 运行并映射
docker run -d -p 6379:6379 --name redis \
-v /root/home/redis/app/conf/redis.conf:/etc/redis/redis.conf \
redis:7.0
- Docker部署环境-redis
RssHub
version: "3"
services:
rsshub:
image: rsshub
restart: always
ports:
- "1200:1200"
environment:
ACCESS_KEY: "your-secret-key"
NODE_ENV: "production"
LISTEN_INADDR_ANY: "0"
CACHE_TYPE: "redis"
REDIS_URL: "redis://redis:6379/"
PUPPETEER_WS_ENDPOINT: "ws://browserless:3000"
PROXY_URI: "http://proxy:7890"
PROXY_URL_REGEX: "https?:\\/\\/(.*)(v2ex|twitter|youtube)(.*)\\.(.*)"
REQUEST_TIMEOUT: 3600000
depends_on:
- proxy
- browserless
- redis
browserless:
image: browserless/chrome
restart: always
environment:
DEFAULT_BLOCK_ADS: "true"
DEFAULT_IGNORE_HTTPS_ERRORS: "true"
DEFAULT_LAUNCH_ARGS: '["--window-size=375,820","--proxy-server=http://proxy:7890"]'
CONNECTION_TIMEOUT: "600000"
ulimits:
core:
hard: 0
soft: 0
depends_on:
- proxy
redis:
image: redis:alpine
restart: always
volumes:
- redis-data:/data
proxy:
image: dreamacro/clash
restart: always
ports:
- "7890:7890"
volumes:
- /root/home/rsshub/app/clash/config.yaml:/root/.config/clash/config.yaml
volumes:
redis-data:
docker cp rsshub-rsshub-1:/app/lib/config.ts /root/home/rsshub/app/lib/config.ts
docker cp rsshub-rsshub-1:/app/lib/routes/ /root/home/rsshub/app/lib/routes/
// 运行
docker compose up -d
// 修改配置 不需要重新构建
docker compose up -d --no-build
// 停止
docker compose down
// 重启
docker compose restart
// 重启单个
docker compose restart rsshub
测试
curl http:
问题
重启服务器问题
- 要先启动mysql服务再启动对应node程序
- 要重新配置mysql连接