To solve the given problem, we need to formulate a linear programming (LP) model that maximizes profit. The decision variables are the number of servings of crab soup and lobster soup to be produced.

Let's denote:
- \(x_1\) as the number of servings of crab soup,
- \(x_2\) as the number of servings of lobster soup.

The objective function, which represents the total profit, is given by \(3x_1 + 5x_2\), since each serving of crab soup gives a profit of $3 and each serving of lobster soup gives a profit of $5.

The constraints are based on the availability of water, crab meat, and lobster meat:
- Water constraint: \(7x_1 + 10x_2 \leq 80\) (since each serving of crab soup requires 7 units of water and each serving of lobster soup requires 10 units of water),
- Crab meat constraint: \(8x_1 \leq 65\) (since each serving of crab soup requires 8 units of crab meat),
- Lobster meat constraint: \(5x_2 \leq 55\) (since each serving of lobster soup requires 5 units of lobster meat).

Additionally, we have non-negativity constraints:
- \(x_1 \geq 0\), since the number of servings cannot be negative,
- \(x_2 \geq 0\), for the same reason.

Now, let's write the Gurobi code to solve this LP problem:

```python
from gurobipy import *

# Create a model
m = Model("soup_profit_maximization")

# Decision variables
x1 = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="crab_soup_servings")
x2 = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="lobster_soup_servings")

# Objective function: Maximize profit
m.setObjective(3*x1 + 5*x2, GRB.MAXIMIZE)

# Constraints
m.addConstr(7*x1 + 10*x2 <= 80, "water_constraint")
m.addConstr(8*x1 <= 65, "crab_meat_constraint")
m.addConstr(5*x2 <= 55, "lobster_meat_constraint")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print(f"Optimal solution found: {m.objVal}")
    print(f"Crab soup servings: {x1.x}")
    print(f"Lobster soup servings: {x2.x}")
else:
    print("No optimal solution found")
```