搭建和管理Web服务器环境是开发者的必备技能。本文将介绍从基础环境搭建到高级配置的完整流程,帮助你在本地和生产环境中快速部署可靠的服务。
Apache服务器配置
macOS上配置Apache
macOS系统自带Apache,只需简单配置即可使用。
启用PHP支持
# 1. 编辑Apache配置文件
sudo vim /etc/apache2/httpd.conf
# 2. 启用PHP模块
# 取消这行的注释:
# LoadModule php5_module libexec/apache2/libphp5.so
# 3. 保存并退出
# 4. 复制PHP配置文件
sudo cp /etc/php.ini.default /etc/php.ini
# 5. 启动Apache
sudo apachectl start
# 6. 创建软链接方便访问
ln -s /Library/WebServer/Documents ~/www
# 7. 重命名或删除默认的index.html.en
Apache控制命令
# 启动Apache
sudo apachectl start
# 停止Apache
sudo apachectl stop
# 重启Apache
sudo apachectl restart
# 查看Apache状态
sudo apachectl status
# 测试配置文件语法
sudo apachectl configtest
# 重新加载配置(不中断服务)
sudo apachectl graceful
配置虚拟主机
在CentOS或其他Linux系统上,可以在主配置文件中包含自定义配置。
# 在httpd.conf中添加
Include etc/apache22/Includes/*.conf
然后在/usr/local/etc/apache22/Includes目录下创建自己的配置文件。
示例配置1:Alias方式
# 文件:/usr/local/etc/apache22/Includes/sun.conf
Alias /~stsun /home/stsun/public_html
<Directory "/home/stsun/public_html">
Options +Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
示例配置2:虚拟主机方式
# 虚拟主机配置
NameVirtualHost *:8080
<VirtualHost *:8080>
DocumentRoot "/Users/sun/w"
<Directory "/Users/sun/w">
DirectoryIndex index.html
AddHandler cgi-script .py .pl
AddType text/html .py .html .pl
Options ExecCGI
Order Allow,Deny
AllowOverride All
Allow from all
</Directory>
</VirtualHost>
重定向配置
Apache支持多种重定向方式:
# 简单重定向
Redirect 301 /old-url http://example.com/new-url
# 使用mod_rewrite
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^old-url$ /new-url [R=301,L]
</IfModule>
# HTTP到HTTPS重定向
<VirtualHost *:80>
ServerName example.com
Redirect permanent / https://example.com/
</VirtualHost>
PHP环境配置
安装多个PHP版本
在开发过程中,可能需要使用不同版本的PHP。
# 在macOS上安装特定版本的PHP
curl -s http://php-osx.liip.ch/install.sh | bash -s 5.5
# 在PHPStorm中配置解释器路径
# 使用:/usr/local/php5/bin
PHP模块管理
include vs require
// include:失败时产生警告,继续执行
include 'config.php';
// require:失败时产生致命错误,停止执行
require 'config.php';
// include_once:只包含一次,避免重复定义
include_once 'functions.php';
// require_once:只包含一次,失败时停止
require_once 'classes.php';
使用建议:
- include:用于可选的非关键文件
- require:用于必须的关键文件
- _once后缀:在脚本执行期间同一文件可能被多次包含时使用,避免函数重定义或变量重新赋值
- include通常放在流程控制的处理区段中,用到时加载
- require通常放在PHP程序最前面,一开始就加载
CGI配置
在macOS上配置CGI支持:
# 1. 创建CGI目录软链接
ln -s /Library/WebServer/CGI-Executables ~/www/cgi-bin
# 2. 进入目录
cd ~/www/cgi-bin
# 3. 放置CGI脚本
# 脚本需要755权限才能执行
chmod 755 script.pl
chmod 755 script.py
# 4. 访问CGI脚本
# http://localhost/cgi-bin/filename
Apache CGI配置示例
# 在Apache配置文件中启用CGI
LoadModule cgi_module libexec/apache2/mod_cgi.so
# 配置CGI目录
<Directory "/Library/WebServer/CGI-Executables">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
# 允许.py和.pl文件作为CGI
AddHandler cgi-script .cgi .pl .py
CSS文件在CGI中的应用
当使用Perl Dancer等框架开发时,需要正确配置静态文件路径。
# 在Dancer应用中配置静态文件
set public => '/path/to/public';
set views => '/path/to/views';
# 在模板中引用CSS
<link rel="stylesheet" href="/css/style.css">
确保Apache配置允许访问静态文件:
<Directory "/path/to/public">
Options -Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
MySQL配置
免密登录MySQL
在脚本中使用MySQL时,可以通过命令行参数传递凭据:
# 免密连接MySQL
mysql -h $host -u $user -p$pass $db
安全建议:
- 不要在脚本中硬编码密码
- 使用配置文件存储敏感信息
- 设置适当的文件权限(600或400)
- 考虑使用MySQL配置文件
~/.my.cnf
# ~/.my.cnf
[client]
user = your_username
password = your_password
host = localhost
用户权限管理
-- 创建用户
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'password';
-- 授予所有权限
GRANT ALL PRIVILEGES ON database.* TO 'appuser'@'localhost';
-- 授予特定权限
GRANT SELECT, INSERT, UPDATE, DELETE ON database.* TO 'appuser'@'localhost';
-- 刷新权限
FLUSH PRIVILEGES;
-- 查看权限
SHOW GRANTS FOR 'appuser'@'localhost';
Python环境配置
pyenv多版本管理
使用pyenv可以轻松管理多个Python版本:
# 安装pyenv
brew install pyenv
# 安装Python版本
pyenv install 2.7.10
pyenv install 3.6.8
# 设置全局默认版本
pyenv global 3.6.8
# 启用多个版本(同时使用python2和python3)
pyenv global 2.7.10 3.4.3
# 设置目录特定版本
cd /path/to/project
pyenv local 3.6.8
# 查看已安装版本
pyenv versions
pipenv虚拟环境管理
pipenv是Python官方推荐的虚拟环境管理工具。
# 创建虚拟环境
mkdir myproject && cd myproject
pipenv --python 3.6
# 激活虚拟环境
pipenv shell
# 安装包
pipenv install requests
pipenv install pytest --dev
# 从requirements.txt安装
pipenv install -r requirements.txt
pipenv install --dev
# 生成requirements.txt
pip freeze > requirements.txt
# 退出虚拟环境
exit
# 删除虚拟环境
pipenv --rm
# 查看虚拟环境路径
pipenv --venv
# 手动删除虚拟环境
# 虚拟环境通常在 ~/.local/share/virtualenvs
批量更新Python包
# update_packages.py
import pip
from subprocess import call
for dist in pip.get_installed_distributions():
call("pip install --upgrade " + dist.project_name, shell=True)
或者使用pip-review:
pip install pip-review
pip-review --auto
在不同环境中配置Python
CentOS本地安装
# 下载Python源码
wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
tar xzf Python-3.6.8.tgz
cd Python-3.6.8
# 配置安装路径
./configure --prefix=$HOME/.local
# 编译安装
make && make install
# 更新PATH
export PATH=$HOME/.local/bin:$PATH
使用国内源
# 使用豆瓣源安装包
pip install -i https://pypi.douban.com/simple/ package_name
# 配置永久源
mkdir -p ~/.pip
cat > ~/.pip/pip.conf << EOF
[global]
index-url = https://pypi.douban.com/simple/
trusted-host = pypi.douban.com
EOF
Django开发配置
Python3环境配置
# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate
# 安装Django
pip install django
# 创建项目
django-admin startproject myproject
# 运行开发服务器
python manage.py runserver
修改页面头部
# Django Admin自定义
# admin.py
from django.contrib import admin
from .models import MyModel
class MyModelAdmin(admin.ModelAdmin):
list_display = ['field1', 'field2', 'field3']
admin.site.register(MyModel, MyModelAdmin)
# 修改Admin站点标题
admin.site.site_header = "My Administration"
admin.site.site_title = "My Admin Portal"
admin.site.index_title = "Welcome to My Admin Portal"
CSS文件配置问题
使用Gunicorn时CSS文件无法加载的解决方案:
# settings.py
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
# 收集静态文件
python manage.py collectstatic
# Nginx配置
location /static/ {
alias /path/to/project/staticfiles/;
}
大数据环境配置
Hive在macOS上的安装
Hive安装需要的资源:
# 参考资源
https://cwiki.apache.org/confluence/display/Hive/AdminManual+Configuration
https://cwiki.apache.org/confluence/display/Hive/GettingStarted
https://noobergeek.wordpress.com/2013/11/09/simplest-way-to-install-and-configure-hive-for-mac-osx-lion/
https://amodernstory.com/2015/03/29/installing-hive-on-mac/
关键步骤:
- 安装Java和Hadoop
- 下载并解压Hive
- 配置环境变量
- 创建元数据库(通常使用MySQL)
- 配置hive-site.xml
Presto配置调试
# 常见问题排查
# 1. 检查配置文件语法
cat presto/config.properties
# 2. 查看日志
tail -f presto/data/var/log/presto-server.log
# 3. 测试连接
presto-cli --server localhost:8080 --catalog hive
Zeppelin配置Presto
# zeppelin-site.xml
<property>
<name>zeppelin.interpreters</name>
<value>...presto...</value>
</property>
# 在Zeppelin中使用Presto
%presto
select count(*) from my_table;
EMR环境配置
创建Hive超级用户
# 在EMR集群中创建Hive超级用户
# 1. SSH到主节点
ssh hadoop@master-node
# 2. 配置用户权限
sudo su hdfs
hdfs dfs -mkdir /user/username
hdfs dfs -chown username:username /user/username
# 3. 配置Hive权限
mysql -u root -p
-- 在Hive元数据库中
CREATE USER 'hiveuser'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'hiveuser'@'%';
FLUSH PRIVILEGES;
Spark文件操作
# Spark中操作文件系统
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("FileOps").getOrCreate()
# 读取文件
df = spark.read.csv("hdfs://path/to/file.csv")
# 写入文件
df.write.parquet("hdfs://path/to/output")
# 删除分区
# 使用HiveQL
spark.sql("ALTER TABLE my_table DROP IF EXISTS PARTITION (date='2020-01-01')")
Node.js环境
CentOS安装Node.js
# 使用EPEL仓库
sudo yum install epel-release
sudo yum install nodejs npm
# 或使用nvm安装
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
source ~/.bashrc
nvm install node
Scala环境配置
在Ammonite中导入第三方JAR包:
# 启动Ammonite时加载JAR
amm --cp /path/to/library.jar
# 或在REPL中加载
import $ivy.`com.example::library:1.0.0`
开发工具配置
VS Code Remote Development
VS Code Remote Development允许你在远程服务器上直接开发,就像在本地一样。
配置步骤
- 安装VS Code
- 安装Remote-SSH扩展
- 配置SSH连接
# ~/.ssh/config
Host aws-server
HostName your-ec2-ip
User ec2-user
IdentityFile ~/.ssh/your-key.pem
- 连接到远程服务器
- 在远程环境中开发
优势
- 直接编辑远程文件
- 使用远程的扩展和工具
- 完整的IDE体验
- 无需在本地安装开发环境
Flask中使用IPython Shell
# Flask应用配置
from flask import Flask
app = Flask(__name__)
# 使用IPython shell
from flask_shell_ipython import IPythonShell
make_ipython_shell_context_processor(app)
# 在模板中使用
{{ get_ipython() }}
# 或使用Flask-Script
from flask_script import Manager, Shell
manager = Manager(app)
def make_context():
return dict(app=app)
manager.add_command("shell", Shell(make_context=make_context))
系统维护
tmux配置
解决权限错误
# tmux创建socket失败
tmux: can't create socket: Permission denied
# 解决方案1:删除旧socket
rm /tmp/tmux-*/default
# 解决方案2:检查libevent版本
ldconfig -p | grep libevent
# 重新安装tmux和libevent
配置文件
# ~/.tmux.conf
# 设置默认终端
set -g default-terminal "screen-256color"
# 设置前缀键为Ctrl-a
unbind C-b
set -g prefix C-a
# 启用鼠标支持
set -g mouse on
# 窗口和面板编号从1开始
set -g base-index 1
setw -g pane-base-index 1
Emacs配置
# macOS上快速配置Emacs
# 安装
brew install emacs
# 基本配置
cat > ~/.emacs << EOF
(package-initialize)
(tool-bar-mode -1)
(menu-bar-mode -1)
(scroll-bar-mode -1)
(show-paren-mode 1)
(setq inhibit-startup-screen t)
(global-linum-mode 1)
EOF
性能优化
查看内存占用
# 查看整体内存使用
free -h
# 查看进程内存占用
ps aux --sort=-%mem | head
# 查看详细内存信息
cat /proc/meminfo
# 使用top命令实时监控
top
Linux命令提示
# ln命令使用备忘
# 创建软链接
ln -s /path/to/source /path/to/link
# 创建硬链接
ln /path/to/source /path/to/link
# 强制创建
ln -sf /path/to/source /path/to/link
故障排查
包管理问题
# Ubuntu重新配置部分安装的包
sudo dpkg --configure -a
# 删除过时的包
sudo apt-get autoremove
# 修复损坏的依赖
sudo apt-get -f install
编译问题
# 安装tmux时libevent未找到
# 先安装libevent开发包
sudo yum install libevent-devel
# 或
sudo apt-get install libevent-dev
# 然后重新编译安装tmux
小结
系统管理和环境配置是每个开发者必须掌握的技能。本文涵盖了:
- Web服务器配置:Apache、PHP、CGI设置
- 数据库配置:MySQL用户管理和安全配置
- Python环境:多版本管理、虚拟环境、包管理
- 大数据工具:Hive、Presto、Spark配置
- 开发工具:VS Code Remote、Emacs、tmux
- 故障排查:常见问题的解决方案
掌握这些配置技巧,你就能在各种环境中快速搭建和部署应用。记住这些关键配置,根据自己的需求进行调整,你会发现环境配置其实并不复杂。
