Linux开发环境搭建全攻略:从零到生产部署
1. 环境搭建前的准备工作
第一次在Linux上搭建开发环境时,我被各种依赖关系和配置问题折磨得够呛。经过多次实践,我总结出了这套"零失败"的搭建方案。这个教程会带你从零开始,在纯净的Linux系统上搭建完整的开发环境栈。
你需要准备:
- 一台安装好Linux的服务器或虚拟机(推荐Ubuntu 22.04 LTS或CentOS 8)
- 稳定的网络连接
- 至少2GB内存(4GB以上更佳)
- 20GB可用磁盘空间
重要提示:所有操作建议在普通用户下进行,使用sudo获取root权限。避免直接使用root账户操作,这是Linux系统管理的基本安全准则。
2. 基础环境配置
2.1 系统更新与基础工具安装
首先更新系统软件包并安装常用工具:
sudo apt update && sudo apt upgrade -y # Ubuntu/Debian # 或者 sudo yum update -y && sudo yum upgrade -y # CentOS/RHEL # 安装基础工具集 sudo apt install -y curl wget vim git unzip net-tools # Ubuntu sudo yum install -y curl wget vim git unzip net-tools # CentOS2.2 创建专用用户(可选但推荐)
为开发环境创建专用用户是个好习惯:
sudo adduser devuser sudo usermod -aG sudo devuser # 授予sudo权限 su - devuser # 切换到新用户3. 核心组件安装与配置
3.1 MySQL 8.0安装
MySQL 8是目前最稳定的版本,提供了窗口函数、CTE等高级特性。
安装步骤:
# Ubuntu wget https://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.deb sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb sudo apt update sudo apt install -y mysql-server # CentOS sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm sudo yum install -y mysql-community-server安全配置:
sudo mysql_secure_installation按照提示设置root密码,移除匿名用户,禁止root远程登录等。
常用命令:
sudo systemctl start mysql # 启动 sudo systemctl enable mysql # 设置开机自启 mysql -u root -p # 登录避坑指南:MySQL 8默认使用caching_sha2_password认证插件,如果遇到客户端连接问题,可以在my.cnf中添加default_authentication_plugin=mysql_native_password
3.2 JDK 17安装
Java 17是当前的LTS版本,提供了密封类、模式匹配等新特性。
安装OpenJDK 17:
# Ubuntu sudo apt install -y openjdk-17-jdk # CentOS sudo yum install -y java-17-openjdk-devel验证安装:
java -version # 应该输出类似:openjdk version "17.0.3" 2022-04-19环境变量配置(可选):
echo 'export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))' >> ~/.bashrc echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc source ~/.bashrc3.3 Redis安装与配置
Redis是高性能的键值存储系统,常用于缓存和会话存储。
安装最新稳定版:
# Ubuntu sudo apt install -y redis-server # CentOS sudo yum install -y epel-release sudo yum install -y redis基本配置:编辑/etc/redis/redis.conf:
sudo vim /etc/redis/redis.conf建议修改:
- bind 127.0.0.1 → bind 0.0.0.0(如需远程访问)
- requirepass yourpassword(设置密码)
- maxmemory 1gb(根据服务器内存调整)
启动服务:
sudo systemctl start redis sudo systemctl enable redis测试连接:
redis-cli 127.0.0.1:6379> ping # 应该返回 PONG3.4 Tomcat 10安装
Tomcat 10支持Servlet 5.0和JSP 3.0规范。
安装步骤:
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.23/bin/apache-tomcat-10.0.23.tar.gz tar -xzf apache-tomcat-10.0.23.tar.gz sudo mv apache-tomcat-10.0.23 /opt/tomcat环境变量配置:
echo 'export CATALINA_HOME=/opt/tomcat' >> ~/.bashrc source ~/.bashrc创建系统服务:
sudo vim /etc/systemd/system/tomcat.service添加以下内容:
[Unit] Description=Apache Tomcat After=network.target [Service] Type=forking Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid Environment=CATALINA_HOME=/opt/tomcat Environment=CATALINA_BASE=/opt/tomcat ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/opt/tomcat/bin/shutdown.sh User=devuser Group=devuser Restart=on-failure [Install] WantedBy=multi-user.target启动服务:
sudo systemctl daemon-reload sudo systemctl start tomcat sudo systemctl enable tomcat访问http://服务器IP:8080应该能看到Tomcat欢迎页面。
3.5 Nginx安装与配置
Nginx是高性能的Web服务器和反向代理。
安装最新稳定版:
# Ubuntu sudo apt install -y nginx # CentOS sudo yum install -y epel-release sudo yum install -y nginx基本配置:编辑/etc/nginx/nginx.conf,建议调整:
- worker_processes auto;(自动匹配CPU核心数)
- keepalive_timeout 65;
- 在http块中添加server_names_hash_bucket_size 64;
常用命令:
sudo systemctl start nginx sudo systemctl enable nginx sudo nginx -t # 测试配置 sudo systemctl reload nginx # 重载配置配置反向代理(示例):
sudo vim /etc/nginx/conf.d/tomcat.conf添加:
server { listen 80; server_name yourdomain.com; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }3.6 Node.js安装
Node.js是JavaScript运行时,用于前端构建和全栈开发。
通过NVM安装(推荐):
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash source ~/.bashrc nvm install --lts # 安装最新LTS版本 nvm use --lts验证安装:
node -v npm -v全局常用工具安装:
npm install -g yarn pm24. 环境验证与集成测试
4.1 组件连通性测试
MySQL连接测试:
mysql -u root -p -e "SHOW DATABASES;"Redis连接测试:
redis-cli -a yourpassword pingTomcat应用部署测试:
wget https://tomcat.apache.org/tomcat-10.0-doc/appdev/sample/sample.war mv sample.war /opt/tomcat/webapps/访问http://服务器IP:8080/sample/
4.2 压力测试准备
安装Apache Benchmark工具:
sudo apt install -y apache2-utils # Ubuntu sudo yum install -y httpd-tools # CentOS测试Nginx静态文件性能:
ab -n 1000 -c 100 http://localhost/测试Tomcat动态内容性能:
ab -n 500 -c 50 http://localhost:8080/sample/5. 安全加固与优化建议
5.1 防火墙配置
Ubuntu使用UFW:
sudo ufw allow 22/tcp # SSH sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS sudo ufw enableCentOS使用firewalld:
sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload5.2 定期维护任务
日志轮转:
sudo vim /etc/logrotate.d/tomcat添加:
/opt/tomcat/logs/catalina.out { daily rotate 30 missingok compress copytruncate }自动更新:
sudo apt install -y unattended-upgrades # Ubuntu sudo yum install -y yum-cron # CentOS6. 常见问题排查
6.1 MySQL启动失败
可能原因:
- 端口3306被占用
- 数据目录权限问题
- 内存不足
解决方案:
sudo tail -n 100 /var/log/mysql/error.log # 查看错误日志 sudo chown -R mysql:mysql /var/lib/mysql # 修复权限6.2 Tomcat应用无法访问
检查步骤:
- 确认Tomcat服务运行状态:
sudo systemctl status tomcat- 检查应用日志:
tail -f /opt/tomcat/logs/catalina.out- 验证端口监听:
sudo netstat -tulnp | grep 80806.3 Nginx 502 Bad Gateway
可能原因:
- 后端服务(Tomcat)未运行
- 代理配置错误
- 防火墙阻止
排查命令:
sudo nginx -t # 测试配置 sudo tail -f /var/log/nginx/error.log # 查看错误日志 curl -v http://localhost:8080 # 测试后端服务7. 进阶配置建议
7.1 数据库主从复制
主库配置(/etc/mysql/my.cnf):
[mysqld] server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog_format = ROW从库配置:
[mysqld] server-id = 2 relay_log = /var/log/mysql/mysql-relay-bin read_only = 17.2 Redis持久化配置
编辑/etc/redis/redis.conf:
save 900 1 # 15分钟内至少1个key变化 save 300 10 # 5分钟内至少10个key变化 save 60 10000 # 1分钟内至少10000个key变化 appendonly yes # 开启AOF持久化7.3 JVM调优参数
在/opt/tomcat/bin/setenv.sh中添加:
export JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError"8. 环境备份与迁移
8.1 数据库备份
MySQL全量备份:
mysqldump -u root -p --all-databases > full_backup.sqlRedis备份:
redis-cli save # 同步保存 # 或者 redis-cli bgsave # 后台保存8.2 应用配置备份
打包关键配置:
tar -czvf server_configs.tar.gz \ /etc/mysql/my.cnf \ /etc/redis/redis.conf \ /etc/nginx/nginx.conf \ /opt/tomcat/conf/server.xml8.3 完整环境迁移
使用Docker容器化所有服务是更现代的迁移方案。可以为每个服务创建Dockerfile,或使用docker-compose编排整个环境。
示例docker-compose.yml:
version: '3' services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: yourpassword volumes: - mysql_data:/var/lib/mysql redis: image: redis:6 command: redis-server --requirepass yourpassword tomcat: image: tomcat:10.0 ports: - "8080:8080" volumes: mysql_data:9. 监控与维护
9.1 基础监控设置
安装Prometheus Node Exporter监控服务器指标:
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz tar -xzf node_exporter-*.tar.gz sudo mv node_exporter-*/node_exporter /usr/local/bin/ sudo useradd -rs /bin/false node_exporter创建系统服务:
sudo vim /etc/systemd/system/node_exporter.service内容:
[Unit] Description=Node Exporter After=network.target [Service] User=node_exporter Group=node_exporter ExecStart=/usr/local/bin/node_exporter [Install] WantedBy=multi-user.target启动服务:
sudo systemctl daemon-reload sudo systemctl start node_exporter sudo systemctl enable node_exporter9.2 日志集中管理
安装Loki日志收集系统:
wget https://github.com/grafana/loki/releases/download/v2.5.0/loki-linux-amd64.zip unzip loki-linux-amd64.zip sudo mv loki-linux-amd64 /usr/local/bin/loki创建配置文件loki-local-config.yaml:
auth_enabled: false server: http_listen_port: 3100 common: path_prefix: /tmp/loki storage: filesystem: chunks_directory: /tmp/loki/chunks rules_directory: /tmp/loki/rules replication_factor: 1 ring: instance_addr: 127.0.0.1 kvstore: store: inmemory schema_config: configs: - from: 2020-10-24 store: boltdb-shipper object_store: filesystem schema: v11 index: prefix: index_ period: 24h启动Loki:
nohup /usr/local/bin/loki -config.file=loki-local-config.yaml > loki.log 2>&1 &10. 性能调优实战
10.1 MySQL性能优化
关键参数调整(/etc/mysql/my.cnf):
[mysqld] innodb_buffer_pool_size = 1G # 总内存的50-70% innodb_log_file_size = 256M innodb_flush_log_at_trx_commit = 2 # 平衡性能与持久性 innodb_flush_method = O_DIRECT innodb_read_io_threads = 8 innodb_write_io_threads = 4 query_cache_type = 0 # MySQL 8已移除查询缓存10.2 JVM调优实战
Tomcat优化(setenv.sh):
export JAVA_OPTS="-server -Xms2G -Xmx2G -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=512M -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=4 -XX:ConcGCThreads=2 -XX:InitiatingHeapOccupancyPercent=70 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/tomcat/logs/heapdump.hprof"10.3 Nginx高性能配置
优化示例(nginx.conf部分配置):
worker_processes auto; worker_rlimit_nofile 100000; events { worker_connections 4096; multi_accept on; use epoll; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 30; keepalive_requests 1000; reset_timedout_connection on; open_file_cache max=200000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; gzip on; gzip_min_length 10240; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml; gzip_disable "MSIE [1-6]\."; }11. 自动化部署方案
11.1 使用Ansible自动化
安装Ansible:
sudo apt install -y ansible # Ubuntu sudo yum install -y ansible # CentOS创建playbook文件setup_env.yml:
--- - hosts: all become: yes tasks: - name: Install common packages apt: name: "{{ item }}" state: present with_items: - curl - wget - vim - git - unzip - net-tools - name: Install MySQL apt: name: mysql-server state: present - name: Install OpenJDK 17 apt: name: openjdk-17-jdk state: present执行playbook:
ansible-playbook -i inventory.ini setup_env.yml11.2 使用Shell脚本自动化
创建安装脚本install_stack.sh:
#!/bin/bash # 系统更新 sudo apt update && sudo apt upgrade -y # 安装基础工具 sudo apt install -y curl wget vim git unzip net-tools # 安装MySQL sudo apt install -y mysql-server sudo mysql_secure_installation # 安装JDK sudo apt install -y openjdk-17-jdk # 安装Redis sudo apt install -y redis-server # 安装Nginx sudo apt install -y nginx # 安装Node.js curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash source ~/.bashrc nvm install --lts12. 容器化部署方案
12.1 Docker基础安装
安装Docker引擎:
# Ubuntu sudo apt install -y apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io # CentOS sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io sudo systemctl start docker sudo systemctl enable docker验证安装:
sudo docker run hello-world12.2 各组件容器化运行
MySQL容器:
docker run --name mysql8 \ -e MYSQL_ROOT_PASSWORD=yourpassword \ -p 3306:3306 \ -v /data/mysql:/var/lib/mysql \ -d mysql:8.0 \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_unicode_ciRedis容器:
docker run --name redis6 \ -p 6379:6379 \ -v /data/redis:/data \ -d redis:6 \ redis-server --requirepass yourpassword --appendonly yesTomcat容器:
docker run --name tomcat10 \ -p 8080:8080 \ -v /path/to/your/app:/usr/local/tomcat/webapps \ -d tomcat:10.012.3 使用Docker Compose编排
创建docker-compose.yml:
version: '3.8' services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: yourpassword MYSQL_DATABASE: appdb volumes: - mysql_data:/var/lib/mysql ports: - "3306:3306" restart: always redis: image: redis:6 command: redis-server --requirepass yourpassword --appendonly yes volumes: - redis_data:/data ports: - "6379:6379" restart: always tomcat: image: tomcat:10.0 volumes: - ./webapps:/usr/local/tomcat/webapps ports: - "8080:8080" depends_on: - mysql - redis restart: always volumes: mysql_data: redis_data:启动服务:
docker-compose up -d