1 環境搭建
1.1 JDK安裝
# ubuntu
sudo apt update # 更新apt
apt install openjdk-8-jdk # 安裝JDK
安裝完畢之后,執行 java -version
命令進行驗證:
1.2 Maven安裝
cd ~
mkdir soft
cd soft
wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
tar -zxvf apache-maven-3.8.8-bin.tar.gzvim ~/.bashrc# 在最后添加環境變量
export M2_HOME=/root/soft/apache-maven-3.8.8
PATH=$M2_HOME/bin:$PATH# 配置生效
source ~/.bashrc
下載了半天,發現是下載源有問題,換成國內的源下載應該會變快。
wget https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz tar -xzf apache-maven-3.3.9-bin.tar.gz
配置完成之后執行命令 mvn -version
進行驗證
國內添加阿里的鏡像源,加快下載速度
vim ~/soft/apache-maven-3.8.8/conf/settings.xml# 在<mirros>標簽中,添加下面的鏡像源<mirror><id>alimaven</id><name>aliyun-maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror># 騰訊云的鏡像騰訊云服務器會快一點。<mirror><id>nexus-tencentyun</id><mirrorOf>*</mirrorOf><name>Nexus tencentyun</name><url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
</mirror>
1.3 redis安裝與配置
1.3.1 安裝redis
安裝 Redis:
# 安裝redis
sudo apt install redis-server
啟動 Redis 服務:
# 啟動 Redis 服務: 安裝完成后,啟動 Redis 服務并設置為開機自啟。
sudo systemctl start redis-server
sudo systemctl enable redis-server
驗證 Redis 是否安裝成功:
# 使用以下命令檢查 Redis 服務的運行狀態,如果顯示為 active (running),則表示 Redis 已成功啟動。
sudo systemctl status redis-server
還可以使用redis-cli
命令連接到 Redis 服務器進行簡單的測試:
redis-cli ping
如果返回 PONG
,則說明 Redis 服務器正常工作。
1.3.2 配置redis
找到配置文件位置:
# 找到redis安裝目錄,查看配置文件
whereis redis
ls
修改配置文件:
vim /etc/redis/redis.conf
更推薦的方式是拷貝一份配置出來進行修改,如在用戶目錄下新增:
cd ~
mkdir soft
cd soft
mkdir redis
cd redis
cp /etc/redis/redis.conf ./
主要修改一下配置:
# 根據實際情況判斷是否需要注釋掉ip限定
bind 127.0.0.1# 開啟后臺任務
damenoize yes
# 配置 Redis 是否被監控管理。supervised 設置為 no,表示 Redis 不會受到外部進程管理的干擾。
supervised no# 設置訪問密碼
requirepass 你的密碼# 端口號,建議需改默認的6379,避免被攻擊
port 6388# 幾個文件的路徑調整一下
pidfile /root(這個是用戶名)/soft/redis/redis.pid
logfile /root/redis/redis.log
dir /root/soft/redis/
寫一個啟動關閉腳本 :vim start.sh
#!/bin/bash# 檢查 pid.log 文件是否存在
if [ -f pid.log ]; then# 讀取 pid.log 中的每個 PID,檢查是否存在該進程cat pid.log | while read pid; doif ps -p $pid > /dev/null; thenecho "Killing existing Redis process with PID $pid"kill $pidelseecho "Process $pid not found, skipping."fidone
fi# 啟動 Redis 并記錄新的 PID
redis-server ./redis.conf# 獲取 Redis 的新 PID 并保存到 pid.log
new_pid=$(ps aux | grep '[r]edis' | awk '{print $2}')
echo $new_pid > pid.log# 檢查 Redis 是否啟動成功
if ps -p $new_pid > /dev/null; thenecho "Redis started successfully with PID $new_pid"
elseecho "Failed to start Redis"
fi
保存配置,添加執行權限:
chmod +x start.sh
啟動redis服務:
./start.sh
ss -lntp | grep 6379
確認是否啟動:
1.4 MySQL安裝
安裝MySQL:
sudo apt-get install mysql-server
設置開機啟動:
sudo systemctl start mysql
sudo systemctl enable mysql
查詢登陸密碼:
grep "temporary password" /var/log/mysqld.log## 輸出如下
# A temporary password is generated for root@localhost: xxxx
修改密碼:
mysql> use mysql;mysql> alter user 'root'@'localhost' identified by '密碼';mysql> flush privileges;
啟動MySQL命令:
# 啟動
sudo service mysql start
# 或 sudo service mysqld start# 關閉
sudo service mysql stop# 重啟
sudo service mysql restart
連接MySQL:
1.5 nginx配置
安裝nginx:
sudo apt install nginx
驗證安裝:
sudo systemctl status nginx
如果 Nginx 已經成功安裝并啟動,你會看到類似以下的輸出:
查看配置文件路徑:
nginx -t
重新加載nginx配置:
nginx -s reload
配置訪問域名:
cd /etc/nginx/vim nginx.conf# 添加子域名解析,每個域名一個獨立的配置文件
# 在http的一級標簽中,添加如下一行配置,表示在conf.d文件下的所有conf結尾的文件,都屬于我們需要使用的nginx配置信息
include /etc/nginx/conf.d/*.conf;
添加論壇的域名解析規則:
vim conf.d/forum.conf# 內容如下
upstream forum_host {server 127.0.0.1:8080;
}
server {# server_name forum.hhui.top;gzip on;gzip_buffers 32 4K;gzip_comp_level 6;gzip_min_length 100;gzip_types application/javascript text/css text/xml;gzip_disable "MSIE [1-6]\."; #配置禁用gzip條件,支持正則。此處表示ie6及以下不啟用gzip(因為ie低版本不支持)gzip_vary on;location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ {access_log off;expires 1d;proxy_pass http://forum_host;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}location ~* ^.+\.(css|js|txt|xml|swf|wav|pptx)$ {access_log off;expires 10m;proxy_pass http://forum_host;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}location / {proxy_set_header X-real-ip $remote_addr;proxy_pass http://127.0.0.1:8080/;proxy_redirect default;}# listen 443 ssl; # managed by Certbot# ssl_certificate /usr/local/nginx/conf/conf.d/cert.pem;# ssl_certificate_key /usr/local/nginx/conf/conf.d/key.pem;# ssl_stapling on;# ssl_stapling_verify on;# resolver 8.8.8.8 8.8.4.4 1.1.1.1 valid=60s;# resolver_timeout 2s;
}server {
# if ($host = forum.hhui.top) {
# return 301 https://$host$request_uri;
# } # managed by Certbotlisten 80;# server_name forum.hhui.top;return 404; # managed by Certbot
}
證書使用let's encrypt
生成
主要修改點如下:
- 移除 HTTPS 相關配置:刪除了
listen 443 ssl;
以及所有與ssl_certificate
、ssl_certificate_key
、ssl_stapling
等相關的配置行。 - 調整重定向邏輯:移除了 80 端口配置中重定向到 HTTPS 的部分,因為現在沒有 HTTPS 了。
server_name
配置:server_name
可以根據你的需求選擇保留或移除。如果保留,可以指定特定的 IP 地址(如server_name <你的 IP 地址>;
),這樣 Nginx 只會對匹配該 IP 的請求進行響應;如果移除,Nginx 會響應所有未被其他server
塊匹配的請求。
修改完配置文件后,使用 sudo nginx -t
檢查配置文件語法是否正確,然后通過 sudo nginx -s reload
重新加載 Nginx 配置使更改生效。
2 源碼部署方式
源碼的部署方式表示直接使用源碼進行構建,下面直接以paicoding的github上main分支的源碼為例進行說明
2.1 下載源碼,并構建
下載
cd ~/
mkdir workspace
cd workspace
git clone git@github.com:itwanger/paicoding.git
或
git clone https://gitee.com/itwanger/paicoding.git
構建
cd paicoding
mvn clean install -DskipTests=ture -U
2.2 修改配置
在服務器上運行技術派時,原則上我們是希望以prod環境為主(表示這個是生產環境,如果是在測試機上進行部署,可以選擇test)
首先第一步就是修改對應環境的配置信息
數據庫配置:
vim paicoding-web/src/main/resources-env/prod/application-dal.yml# 修改數據庫和redis的連接密碼spring:datasource:url: jdbc:mysql://localhost:3306/${database.name}?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghaiusername: 真實的用戶名password: 真實的密碼redis:host: 真實的redis地址port: 真實的redis端口password: 真實的redis訪問密碼
oss配置:
生產環境上的圖片默認上傳到阿里云,因此也需要修改對應的配置
vim paicoding-web/src/main/resources-env/prod/application-image.ymlimage:# 服務器保存圖片的絕對地址abs-tmp-path: /home/admin/storage/# 圖片前綴web-img-path: forum/img/# 臨時存儲目錄tmp-upload-path: /tmp/forum/# 圖片訪問域名cdn-host: https://paicoding.com/oss:type: ali # 這個表示是使用阿里云的ossprefix: xxxendpoint: xxxak: xxxsk: xxxbucket: xxxhost: https://cdn.tobebetterjavaer.com/ # 訪問圖片的域名前綴
注意,當沒有oss時,希望直接將圖片保存到服務器上,可以如下設置(一般不建議這么干,一個是安全風險,一個是靜態圖片的存儲與網絡資源都將占用服務器,會導致服務器本身負載高)
log文件配置:
vim paicoding-web/src/main/resources-env/prod/application-web.ymllog:path: /home/admin/workspace/paicoding/logs # 請使用實際的地址進行替換
env:name: prod
2.3 登錄方式修改
技術派默認提供的是根據微信公眾號的驗證碼方式來實現登錄,因此如果希望在你自己的服務器上部署時,請完整的替換相應的微信公眾號二維碼、微信開放平臺對接的相關的配置參數,具體詳情可參考
下面列出基本的修改點:
1.配置文件 application-config.yml
view.site.contactMeWxQrCode
: 公眾號二維碼view.site.wxLoginUrl
: 公眾號二維碼解碼后的文本
2.微信公眾號平臺
開啟開發者相關權限,設置回調url
登錄方式主要使用的是微信公眾平臺的回調機制,因此需要設置白名單,當前沒有使用直接調用微信公眾號接口獲取信息的功能,因此無需設置開發者id,密碼等信息
2.4 啟動
以上修改完畢之后,可以直接啟動服務(注意無需初始化數據庫表,默認的庫名 pai_coding,可以通過修改application.yml配置文件中的database.name來替換)
# 進入源碼根目錄
cd ~/workspace/paicoding
# 給啟動命令腳本添加執行權限
chmod +x launch.sh
# 啟動
./launch.sh start
啟動完畢之后,可以再當前目錄看到新增一個 logs 目錄,下面會有兩個日志文件
pai-prod.log
:系統日志req-prod.log
:外部請求日志
當系統日志中輸出 啟動成功,點擊查看首頁 的字樣時,表示正常啟動了,此時可以進行訪問
說明:
重新部署命令: launch.sh start
會重新打包,并將之前運行的.jar
重名為 .jar.bak
的本分文件
重啟命令:launch.sh restart
單純的重啟,不會重新打包
若部署的不是prod環境,需要修改launch.sh
腳本中的配置,將下面的 -Pprod
修改為 -P
新環境
- jvm參數,根據實際的機器情況進行需改調整
3 jar包部署方式
jar包部署的方式主要針對的是直接上傳一個fat-jar包到服務器上運行,編譯打包的過程可以是本機、也可以是jenkins,這里以簡單的本機為例進行說明
3.1 SSH配置
我們采用scp的方式上傳jar包,因此直接配置ssh訪問服務器會省事很多,避免每次都需要輸入密碼
- 本地生成密鑰對:一般可通過在本地終端輸入相關命令(如
ssh-keygen
)來生成密鑰對。
ssh-keygen -t rsa -b 2048 -C "your_email@example.com"
- 服務器添加配置:
- 打開服務器上的
~/.ssh/authorized_keys
文件,命令為vim ~/.ssh/authorized_keys
。 - 在文件中添加本機公鑰內容。 如示例中的公鑰內容:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVDpviHo9nRJ+i3S8KYZAi3Yp33J3whqdWb2W3hhjkiPZiih76Q/lvCinwVWi0NlvWZheBfENKiN0d4p3xaF6GC+DfrITwcIHm0/PbVOxWmuatfqD+C0CKYZxIshYsmRWFFXqRz83sCPHv4O66HEIfnlynKPdayygdG++K6wPTBNyKznk8C8Ghpd7q2UngMWjWv7s+jWp0tRQQmyRnJhcSogGzcs8W39l2U5Qy7IscWkB8OJ8ZfRynTVAFoVpMSJh6nrBbp9idREWT6zW9UdAvy9PG9IuWTX7oBQv+XYQBH1q5Y0ZqTJ2Ot35jUCLK35T+9uFkJcQH20VwW3VL6Epb your_email@example.com
(實際操作中請替換為自己的本機公鑰) 。
- 打開服務器上的
配置完成后,就可以使用 scp 方式上傳 jar 包到服務器,無需每次都輸入密碼。
- 使用 scp 命令上傳 JAR 包:命令格式為
scp -r 本地JAR包路徑 用戶名@服務器IP地址:服務器目標路徑
。
- 如果是上傳單個 JAR 包,假設本地 JAR 包路徑為
C:\Users\user\Downloads\paicoding - web - 0.0.1 - SNAPSHOT.jar
,服務器用戶名為admin
,服務器 IP 地址為192.168.1.100
,希望將 JAR 包上傳到服務器的/home/admin/jar_files/
目錄下,那么命令為:
scp -r C:\Users\user\Downloads\paicoding - web - 0.0.1 - SNAPSHOT.jar admin@192.168.1.100:/home/admin/jar_files/
- 如果是上傳整個包含 JAR 包的目錄,例如
C:\Users\user\Desktop\jar_packages
目錄下有多個 JAR 包,要上傳到服務器的/home/admin/jar_files/
目錄,命令為:
scp -r C:\Users\user\Desktop\jar_packages\* admin@192.168.1.100:/home/admin/jar_files/
- 執行命令后,如果 SSH 密鑰對配置正確,就會開始上傳 JAR 包。如果提示輸入密碼,說明 SSH 密鑰對配置可能有問題,需要重新檢查配置。
在上傳過程中,會顯示上傳進度和相關信息。上傳完成后,就可以在服務器的指定目標路徑下找到上傳的 JAR 包。
3.2 項目配置
和源碼配置修改相同
- prod:數據庫配置,oss配置,登錄配置
3.3 打包上傳
主要使用 deploy.sh 腳本實現本地編譯打包、上傳、運行等操作,注意上面幾個動作是一體的
- 修改deploy.sh腳本中,需要上傳的jar包目錄、目標ip地址
chmod +x deploy.sh
# 打包jar,并上傳到服務器,關閉舊的應用,重新啟動新的應用
./deploy.sh prod
4 總結
本文以 Linux 系統為運行環境,介紹基礎環境搭建,含 JDK、Maven、Redis、MySQL、Nginx 的安裝與配置。提供源碼和 Jar 包兩種部署方式,前者需下載構建、修改配置再啟動;后者要配置 ssh、項目信息,用腳本打包上傳。歡迎實操反饋問題。
5 參考鏈接
- 技術派服務器部署指導手冊
- 項目倉庫(GitHub):https://github.com/itwanger/paicoding
- 項目倉庫(碼云):https://gitee.com/itwanger/paicoding
- 項目演示地址:https://paicoding.com