架设App服务器不仅仅是买一台机器,它通常包含以下几个核心部分:
1、服务器硬件:物理机或云虚拟机。
2、操作系统:通常是Linux(如Ubuntu, CentOS)。
3、运行环境:你的App代码运行所需的环境(如Node.js, Python, Java JRE, PHP等)。
4、Web服务器:处理HTTP请求(如Nginx, Apache)。
5、数据库:存储应用数据(如MySQL, PostgreSQL, MongoDB)。
6、应用代码:你自己编写的程序。
7、安全与维护:防火墙、SSL证书、备份等。
绝大多数开发者和公司都会选择云服务商,而不是自购物理服务器,因为它更灵活、可靠且易于扩展。
对于个人和小型项目,推荐以下性价比高的选择:
腾讯云 /阿里云国内首选,备案、访问速度都有保障。
AWS /Google Cloud /Microsoft Azure国际三大巨头,功能强大,有免费试用额度。
Vultr /Linode海外优秀的VPS服务商,按小时计费,灵活。
地域选择离你的目标用户最近的地域,用户在国内就选国内机房(需要备案),用户在美国就选美国机房。
机型初学者选择“共享型”或“通用型”即可。
操作系统强烈推荐Ubuntu 20.04 LTS 或22.04 LTS,社区活跃,资料多,对新手友好。
配置
CPU1核 起步。
内存1GB - 2GB 起步(1GB跑小项目可行,2GB更稳妥)。
硬盘20GB - 40GB SSD 足够。
带宽按流量计费(性价比高)或固定带宽(1Mbps-5Mbps起步)。
购买后,你会获得一个服务器的公网IP地址和root密码(或SSH密钥)。
使用SSH工具远程连接你的服务器。
Windows用户使用 PuTTY 或 Xshell。
macOS/Linux用户直接使用终端(Terminal)。
连接命令格式:
ssh root@你的服务器公网IP
然后输入密码即可登录。
第二步:配置服务器环境(以Ubuntu为例)
登录后,先进行系统更新和基础配置。
sudo apt update && sudo apt upgrade -y
不建议长期使用root用户,创建一个新用户并赋予sudo权限。
adduser your_username usermod -aG sudo your_username
Ubuntu通常使用ufw
来管理防火墙。
允许SSH连接,否则会断联!
允许HTTP/HTTPS流量。
sudo ufw allow OpenSSH sudo ufw allow 80 # HTTP sudo ufw allow 443 # HTTPS sudo ufw enable # 启用防火墙 sudo ufw status # 查看规则
这里以最常见的Node.js + Nginx + MySQL 组合为例。
a. 安装Node.js
使用NodeSource的安装脚本(以Node.js 18 LTS为例) curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs 检查版本 node -v npm -v
b. 安装Nginx
sudo apt install nginx -y sudo systemctl start nginx sudo systemctl enable nginx # 开机自启
现在在浏览器输入你的服务器公网IP,你应该能看到Nginx的欢迎页面。
c. 安装MySQL
sudo apt install mysql-server -y sudo systemctl start mysql sudo systemctl enable mysql
安装后运行安全配置脚本:
sudo mysql_secure_installation
它会引导你设置root密码、移除匿名用户、禁止远程root登录等,非常重要!
有多种方式:
SCP命令scp -r /local/path/your_app root@服务器IP:/remote/path/
Git克隆在服务器上安装git,直接从代码仓库(GitHub, Gitee)拉取。
RSync工具更高效的同步工具。
进入你的应用代码目录:
cd /path/to/your_app npm install # 如果是Node.js项目
切勿将密码、API密钥等敏感信息写入代码! 使用环境变量。
sudo nano /etc/environment 在文件末尾添加, DB_HOST=localhost DB_USER=your_db_user DB_PASS=your_strong_password
然后重启服务器或重新登录使变量生效,在你的代码中通过process.env.DB_HOST
来读取。
你的Node.js应用可能运行在3000端口,但用户是通过80端口访问的,Nginx的作用就是作为反向代理,将外部请求转发给你的应用。
编辑Nginx的配置文件:
sudo nano /etc/nginx/sites-available/your_app
写入以下内容:
server { listen 80; server_name your_domain.com OR your_server_ip; # 没有域名就填IP location / { proxy_pass http://localhost:3000; # 转发到你应用的实际端口 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_cache_bypass $http_upgrade; } }
启用这个配置(创建一个符号链接):
sudo ln -s /etc/nginx/sites-available/your_app /etc/nginx/sites-enabled/
测试Nginx配置是否正确:
sudo nginx -t
如果显示OK
,就重载Nginx:
sudo systemctl reload nginx
如果你直接运行node app.js
,退出终端后进程就结束了,需要使用进程管理工具。
sudo npm install -g pm2 pm2 start your_app_entry_file.js --name "my-app" pm2 save # 保存当前进程列表 pm2 startup # 设置开机自启
现在你的应用就在后台持续运行了。
使用Let‘s Encrypt免费证书,通过Certbot工具自动化安装。
sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d your_domain.com -d www.your_domain.com
它会自动修改你的Nginx配置,并设置自动续期。
代码本身就应在Git仓库中。
数据库使用mysqldump
命令定期导出SQL文件,并传输到其他地方(如OSS、本地)。
mysqldump -u username -p database_name > backup.sql
使用htop
查看系统资源(CPU、内存)。
使用pm2 monit
查看你的应用进程状态。
查看日志pm2 logs
或sudo tail -f /var/log/nginx/error.log
。
用户请求 | v 互联网 -> [云服务器] (公网IP) | v [防火墙] (UFW) 只开放22, 80, 443端口 | v [Nginx] (监听80/443端口) | -> 静态文件(HTML, CSS, JS) | v (反向代理) [你的App] (运行在3000端口,由PM2守护) | v [数据库] (MySQL, 运行在本地3306端口)
1、从云开始:不要自己折腾物理机,云服务器是标准做法。
2、自动化:使用脚本(Shell, Ansible)来自动化服务器配置,避免手动操作出错。
3、容器化(进阶):当应用变复杂时,研究Docker和Kubernetes,它们能极大简化部署和环境一致性问题。
4、持续集成/持续部署(CI/CD,进阶):使用GitHub Actions, Jenkins等工具,实现代码一提交就自动测试和部署到服务器。
对于第一次架设,按照上述步骤操作,你就能成功让一个简单的App在服务器上跑起来,遇到问题多查阅官方文档和社区论坛,大部分坑都有现成的解决方案,祝你成功!
文章摘自:https://idc.huochengrm.cn/fwq/14760.html
评论