To solve this linear programming optimization problem, we first need to define the decision variables and the objective function. Let's denote:

- $x$ as the number of servings of chicken curry to be made.
- $y$ as the number of servings of goat curry to be made.

The objective is to maximize profit. Given that the profit per serving of chicken curry is $5 and the profit per serving of goat curry is $7, the objective function can be written as:

Maximize: $5x + 7y$

Next, we need to define the constraints based on the available resources (tomatoes, curry paste, and water) and the requirements for each type of curry.

1. Tomatoes constraint: One serving of chicken curry requires 1 unit of tomatoes, and one serving of goat curry requires 2 units of tomatoes. The restaurant has 20 units of tomatoes available.
   - $x + 2y \leq 20$

2. Curry paste constraint: One serving of chicken curry requires 2 units of curry paste, and one serving of goat curry requires 3 units of curry paste. The restaurant has 30 units of curry paste available.
   - $2x + 3y \leq 30$

3. Water constraint: One serving of chicken curry requires 3 units of water, and one serving of goat curry requires 1 unit of water. The restaurant has 25 units of water available.
   - $3x + y \leq 25$

Additionally, the number of servings of each type of curry cannot be negative:
- $x \geq 0$
- $y \geq 0$

Now, let's translate this into Gurobi code in Python:

```python
from gurobipy import *

# Create a new model
model = Model("Curry_Production")

# Define the decision variables
x = model.addVar(lb=0, vtype=GRB.CONTINUOUS, name="chicken_curry")
y = model.addVar(lb=0, vtype=GRB.CONTINUOUS, name="goat_curry")

# Set the objective function
model.setObjective(5*x + 7*y, GRB.MAXIMIZE)

# Add constraints
model.addConstr(x + 2*y <= 20, "tomatoes_constraint")
model.addConstr(2*x + 3*y <= 30, "curry_paste_constraint")
model.addConstr(3*x + y <= 25, "water_constraint")

# Optimize the model
model.optimize()

# Print the results
if model.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Chicken Curry: {x.x}")
    print(f"Goat Curry: {y.x}")
    print(f"Maximum Profit: ${model.objVal}")
else:
    print("No optimal solution found")
```